package jmetal.problems.adaboost;

public class Feature4 extends Feature {

	public Feature4(){
		setType(4);
		setMinHeight(2);
		setMinWidth(2);
	}
	
	@Override
	public double calculateValue(double[][] image, int x, int y, int width, int height) {
		double result = 0;
		double A1, B1, C1, D1, A2, B2, C2, D2, A3, B3, C3, D3, A4, B4, C4, D4;
		if (y == 0) {
			A1 = C1 = A2 = C2 = 0;
			if (x == 0) {
				A1 = A3 = B1 = B3 = 0;
			} else {
				B1 = image[x - 1][y - 1 + height / 2];
				//A1 = image[x - 1][y - 1];
				B3 = image[x - 1][y - 1 + height];
				A3 = image[x - 1][y - 1 + height / 2];
			}
		} else if (x == 0) {
			A1 = A3 = B1 = B3 = 0;
			C1 = image[x - 1 + width / 2][y - 1];
			C2 = image[x - 1 + width][y - 1];
			A2 = image[x - 1 + width / 2][y - 1];
		} else {

			B1 = image[x - 1][y - 1 + height / 2];
			A1 = image[x - 1][y - 1];
			C1 = image[x - 1 + width / 2][y - 1];
			C2 = image[x - 1 + width][y - 1];
			A2 = image[x - 1 + width / 2][y - 1];
			A3 = image[x - 1][y - 1 + height / 2];
			B3 = image[x - 1][y - 1 + height];

		}

		D1 = image[x - 1 + width / 2][y - 1 + height / 2];
		B2 = image[x - 1 + width / 2][y - 1 + height / 2];
		D2 = image[x - 1 + width][y - 1 + height / 2];
		C3 = image[x - 1 + width / 2][y - 1 + height / 2];
		D3 = image[x - 1 + width / 2][y - 1 + height];
		D4 = image[x - 1 + width][y - 1 + height];
		C4 = image[x - 1 + width][y - 1 + height / 2];
		B4 = image[x - 1 + width / 2][y - 1 + height];
		A4 = image[x - 1 + width / 2][y - 1 + height / 2];

		double pretoE = A1 + D1 - (B1 + C1);
		double brancoD = A2 + D2 - (B2 + C2);
		double brancoE = A3 + D3 - (B3 + C3);
		double pretoD = A4 + D4 - (B4 + C4);
		result = (pretoD + pretoE) - (brancoE + brancoD);
		setValue(result);

		return result;
	}

}
